package com.nulldev.util.web.flexibleKit.flexRenderer.paths.subgens;

import com.nulldev.util.VariableAPI.ArrayUtils;
import com.nulldev.util.graphics.renderIt.api.renderItGraphicsInterface;
import com.nulldev.util.graphics.renderIt.api.core.RITFont;
import com.nulldev.util.graphics.renderIt.renderer.global.rColors;
import com.nulldev.util.graphics.renderIt.util.renderPosition;
import com.nulldev.util.gui.fontAPI.FontManager;
import com.nulldev.util.web.flexibleKit.flexRenderer.FlexEnvironment;
import com.nulldev.util.web.flexibleKit.flexRenderer.paths.PathGenerator;
import com.nulldev.util.web.flexibleKit.flexRenderer.styling.fonts.flexFontManager;
import com.nulldev.util.web.flexibleKit.general.RenderOperation;
import com.nulldev.util.web.flexibleKit.global.GlobalRendererSettings;
import com.nulldev.util.web.flexibleKit.jfvParse.Node;

public class ButtonGenerator implements PathGenerator {

	@Override
	public RenderOperation generate(final Node n, final PathGenerationFlags... flags) {
		return new RenderOperation() {

			private RITFont font;

			@Override
			public renderPosition doRender(final renderItGraphicsInterface i, final renderPosition rp, final FlexEnvironment imageCache) {
				final int fontSize = GlobalRendererSettings.SCALE_TEXT_AUTOMATICALLY ? i.viewport_getWidth() / 32 : flexFontManager.getFontSize("button");
				if (font == null) {
					font = i.awt_make_font(FontManager.getFontSetAsAWT(fontSize));
				}
				final int x = rp.getX();
				final int y = rp.getY();
				i.bd_fillRect(x, y, rp.appendGetX(60), rp.appendGetY(15), rColors.gray);
				i.text_shadowedString(n.getTextContent(), x + 5, rp.getY(), font, rColors.wheat);
				if (ArrayUtils.contains(flags, PathGenerationFlags.RENDER_INLINE)) {
					rp.addY(fontSize);
					return rp.clone().addX(x);
				} else
					return rp.addY(fontSize).setAndResetX();
			}

			@Override
			public Node operationFor() {
				return n;
			}

			@Override
			public boolean keepInline() {
				return ArrayUtils.contains(flags, PathGenerationFlags.RENDER_INLINE);
			}
		};
	}

}
